<?php

class Sistema_AuthController extends Zend_Controller_Action {

    public $_modulo = 'sistema';
    public $title_login = 'Acesso ao Painel';
    public $_title = '';
    
    public function init() {
        /* Initialize action controller here */
        $this->view->title = $this->_title;

        $this->view->headLink()->prependStylesheet($this->getFrontController()->getBaseUrl().'/public/media/css/login.css');
        
        $this->view->headLink()->prependStylesheet($this->getFrontController()->getBaseUrl().'/public/media/js/bootstrap/dist/css/bootstrap.min.css');
    }

    public function indexAction() {
        return $this->_helper->redirector('login');
    }

    public function loginAction() {
        
        $this->_helper->layout->setLayout("layout_clean");
        
        $this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
        $this->view->messages = $this->_flashMessenger->getMessages();
        //$form = new Sistema_Form_Login(); // Form_Login();
        
        $this->view->urlbase = $this->getFrontController()->getBaseUrl();
        
        $this->view->title_login = $this->title_login;

        //$this->view->form = $form; 
        
        //Verifica se existem dados de POST
        if($this->getRequest()->isPost()){ 
            //$data = $this->getRequest()->getPost(); 
            //Formulário corretamente preenchido?
            if(1){//($form->isValid($data)) {
                
                $login = $this->_getParam('USU_LOG','1');//$form->getValue('USU_LOG');
                $senha = $this->_getParam('USU_SNH','1');//$form->getValue('USU_SNH');
                
                $dbAdapter = Zend_Db_Table::getDefaultAdapter();
                //Inicia o adaptador Zend_Auth para banco de dados
                $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
                $authAdapter->setTableName('USUARIOS')
                        ->setIdentityColumn('USU_LOG')
                        ->setCredentialColumn('USU_SNH')
                        ->setCredentialTreatment('SHA1(?)');
                
                //Define os dados para processar o login
                $authAdapter->setIdentity($login)
                            ->setCredential($senha);
                
                //Efetua o login
                $auth = Zend_Auth::getInstance();
                $result = $auth->authenticate($authAdapter);
                //Verifica se o login foi efetuado com sucesso
                if($result->isValid()) { 
                    
                    //Armazena os dados do usuário em sessão, apenas desconsiderando
                    //a senha do usuário
                    $info = $authAdapter->getResultRowObject(null, 'USU_SNH');
                    
                    // $authAdapter->setIdentity('USU_SES')->setCredential(session_id());
                    
                    $storage = $auth->getStorage();
                    $storage->write($info);
                    
                    // valida status do usuário
                    Zend_Loader::loadClass('usuario','library');
                    if(!Usuario::ValidarStaUsu($storage->read()->USU_ID)){
                        //Dados inválidos
                        $this->_helper->FlashMessenger('Usuário ou senha inválidos!');
                        $this->_redirect('/'.$this->_modulo.'/auth/login');
                    }
                    
                    Usuario::setIdSessaoUsu($storage->read()->USU_ID, session_id());
                    
                    $arr_mod_sessao = array();					
                    $arr_mod_menu_inicial = array();	
                    
                    //$menu = new Sistema_Model_DbTable_Menu();
                    //$mod = new Sistema_Model_DbTable_Modulos();
                    
                    $select = new Zend_Db_Select(Zend_Db_Table::getDefaultAdapter());                   
                    $select->from('MENU')->order('MEN_ORD ASC');
                    $result = $select->query();
                    $res_menu = $result->fetchAll();
                    foreach ($res_menu as $key => $men) {
                        //echo $men['MEN_NOM']."<br>";
                        //$res_mod = $mod->fetchAll('MEN_ID = '.$men['MEN_ID'])->toArray();   
                        $obj_prm = new Sistema_Model_DbTable_PermissaoHasModulo();
                        $row_prm = $obj_prm->fetchAll('PER_ID = '.$info->PER_ID)->toArray();
                        
                        
                        $select = new Zend_Db_Select(Zend_Db_Table::getDefaultAdapter());
                        $select->from('MODULOS')->where('MEN_ID = '.$men['MEN_ID'].' AND MOD_STA = 1')->order('MOD_ORDMEN ASC')->order('MOD_NOM ASC');
                        $result = $select->query();
                        $res_mod = $result->fetchAll();
                        $arr_mod = array();
                        foreach ($res_mod as $key2 => $md) { 
                            //echo ' - '.$md['MOD_NOM']."<br>";
                            // TESTA PERMISSAO, para montar os menus
                            foreach($row_prm as $r_prm){
                                if($md['MOD_ID'] == $r_prm['MOD_ID'])
                                {
                                    // tem modulos
                                    if($md['MOD_MEN'] == 1) $arr_mod[$key2] = array('id'=>$md['MOD_ID'], 'nome'=>$md['MOD_NOM'], 'arquivo' => $md['MOD_ARQ'] );

                                    $arr_mod_sessao[$md['MOD_ARQ']] = $md['MOD_NOM'];
                                    
                                    $arr_mod_permissao[$md['MOD_ARQ']] = array('MOD_ID'=>$md['MOD_ID'],'MOD_ADD'=>$r_prm['MOD_ADD'],'MOD_EDT'=>$r_prm['MOD_EDT'],'MOD_DEL'=>$r_prm['MOD_DEL']);
                                    
                                    //if($md['MOD_HOM'] == 1) $arr_mod_menu_inicial[$md['MOD_ID']] = array('MOD_ID'=>$md['MOD_ID'],'MOD_NOM'=>$md['MOD_NOM'],'MOD_ICO'=>$md['MOD_ICO'],'MOD_ARQ'=>$md['MOD_ARQ']);

                                }
                            }
                        }
                        
                        // se tem modulos, grava menu com módulos
                        if(count($arr_mod) > 0)
                            $arr_menu[$key] = array(
                                'id' => $men['MEN_ID'],
                                'nome' => $men['MEN_NOM'],
                                'css'  => $men['MEN_CSS'],
                                'modulos' => array('0'=>array('modulo' => $arr_mod))
                            );    
                    }
                    
                    $obj = new Sistema_Model_DbTable_Modulos();
                    $res_mod = $obj->fetchAll($obj->select()->where('MOD_STA = 1 AND MOD_HOM = 1')->order('MOD_NOM ASC')); // MOD_ORDMENINI
                    foreach ($res_mod as $key2 => $md) {
                        foreach($row_prm as $r_prm){
                            if($md['MOD_ID'] == $r_prm['MOD_ID'])
                            {
                                $arr_mod_menu_inicial[$md['MOD_ID']] = array('MOD_ID'=>$md['MOD_ID'],'MOD_NOM'=>$md['MOD_NOM'],'MOD_ICO'=>$md['MOD_ICO'],'MOD_ARQ'=>$md['MOD_ARQ']);
                            }
                        }
                    }
                    
                    // criar menu no arquivo xml
                    $config = new Zend_Config(array(), true);
                    $config->menus = array();
                    $config->menus->menu = array($arr_menu);

                    $writer = new Zend_Config_Writer_Xml();
                    $writer->write('public/xml/menu_'.$storage->read()->USU_ID.'.xml', $config);
                    
                    // grava modulos sessão
                    $sessao = new Zend_Session_Namespace('Modulos');
                    $sessao->modulos = $arr_mod_sessao;
                    $sessao->modulos_menu_inicial = $arr_mod_menu_inicial;
                    $sessao->modulos_permissao = $arr_mod_permissao;
                    
                    $sessao = new Zend_Session_Namespace('Parametros');
                    $obj = new Sistema_Model_DbTable_Parametros();
                    $sessao->parametros = $obj->fetchRow()->toArray();
                    
                    // ckfinder
                    $_SESSION['ckfinder_baseUrl'] = $this->getFrontController()->getBaseUrl().'/public/upload/site/';
                    
                    //Redireciona para o Controller protegido
                    return $this->_helper->redirector->goToRoute(array('module'=> $this->_modulo ,'controller' => 'index'), null, true);
                
                
                } else {
                
                    //Dados inválidos
                    $this->_helper->FlashMessenger('Usuário ou senha inválidos!');
                    $this->_redirect('/'.$this->_modulo.'/auth/login');
                }
                
            } else {
                //Formulário preenchido de forma incorreta
                //$form->populate($data);
            }
        
        }
    }

    public function logoutAction() {
        //Limpa dados da Sessão
        Zend_Auth::getInstance()->clearIdentity();

        return $this->_helper->redirector('index');
    }

}